import { Widget, _decorator, ProgressBar, math, macro, Component } from 'cc';
// import { UIBase } from '../scriptBase/UIBase';
import { Bundle } from '../enum/Bundle';
import { ResMgr } from '../manager/ResMgr';
import UI from 'db://assets/Script/Manager/UI';
import { UIMain } from './UIMain';
// import { UI } from '../enum/UI';
// import { Setting } from '../Setting';
// import { ItemMgr } from '../manager/ItemMgr';
// import { AdMgr } from '../manager/AdMgr';
const { ccclass, property, requireComponent } = _decorator;

@ccclass('UI/UILoading')
@requireComponent(Widget)
export class UILoading extends Component {

    // private progressBar: ProgressBar = null

    private loaded: boolean = false

    protected async onLoad() {
        // this.progressBar = this.getComponentInChildren(ProgressBar)
    }

    protected async start() {
        this.schedule(this.updateProgress, 0.25, macro.REPEAT_FOREVER)
        await this.loadBundle()
        await this.loadRes()
        this.loaded = true
    }

    ShowOn() {
        this.node.active = true;
    }

    private init() {
        // Setting.init()
        // ItemMgr.init()
        // AdMgr.init()
    }

    public onOpen(data?: any): void {
    }


    public onClose(data?: any): void {
    }

    private loadBundle() {
        return Promise.all([
            ResMgr.loadBundle(Bundle.Icon),
            // ResMgr.loadBundle(Bundle.Audio),
            ResMgr.loadBundle(Bundle.Game),
            ResMgr.loadBundle(Bundle.UI),
        ])
    }

    private loadRes() {
        return Promise.all([
            ResMgr.loadDir(Bundle.Icon),
            // ResMgr.loadDir(Bundle.Audio),
            ResMgr.loadDir(Bundle.Game),
            ResMgr.loadDir(Bundle.UI),
        ])
    }

    protected updateProgress(): void {
        // let progressAdd: number = math.randomRange(0.1, 0.3)
        // this.progressBar.progress = Math.min(this.progressBar.progress + progressAdd, 0.9)

        if (this.loaded) {
            // this.progressBar.progress = 1.0
            this.unschedule(this.updateProgress)
            this.onLoadCompleted()
        }
    }

    private onLoadCompleted(): void {
        this.init()
        this.scheduleOnce(() => {
            // this.close()
            this.node.active = false;
            // this.open(UI.Main)
            UI.Instance.CreatePanel_sub(`ui`, `UIMain`, UIMain);
        }, 0.1)
    }
}